本文共 4209 字,大约阅读时间需要 14 分钟。
Django是一个高效的Web开发框架,适合快速搭建复杂的Web应用。在本文中,我们将详细介绍如何搭建一个功能全面的注册登录系统,涵盖从环境搭建到系统优化的各个环节。
在开始项目开发之前,我们需要明确项目的需求和技术架构。以下是需要重点关注的几个方面:
路由配置是项目的骨干,负责如何将用户请求映射到相应的视图函数和模板。通过Django的urlconf工厂,我们可以灵活地配置路由规则。
视图配置是项目的核心,决定了用户请求如何被处理。我们需要定义各个HTTP方法对应的处理逻辑,例如GET、POST等。
数据库模型是项目的基础,决定了数据如何存储和查询。我们需要设计一个用户表,存储用户的基本信息、登录记录等。
模板是前端展示的基础,需要设计首页、登录页面、注册页面等模板,确保界面友好且功能完善。
通过命令安装Django框架,并创建一个新的项目环境以隔离依赖项。
pip install djangopython manage.py startproject login
新建必要的应用程序用于存储用户数据和逻辑。
python manage.py createapp login
确保项目使用正确的时区和语言设置。
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'
生成数据库迁移脚本并将数据库表创建出来。
python manage.py makemigrationspython manage.py migrate
启动Django开发服务器,测试项目是否正常运行。
python manage.py runserver
使用Git进行代码管理和版本控制。
git initgit add *git commit -m "项目环境搭建完成"
用户表是项目的核心数据表,存储用户的基本信息和相关时间字段。
from django.db import modelsclass SiteUser(models.Model): gender_choice = ( (0, '未知'), (1, '男'), (2, '女'), ) name = models.CharField(max_length=128, unique=True) password = models.CharField(max_length=256) email = models.EmailField(unique=True) gender = models.IntegerField(choices=gender_choice, default=0) create_time = models.DateTimeField(auto_now_add=True) modify_time = models.DateTimeField(auto_now=True) last_login_time = models.DateTimeField(null=True, blank=True)
通过urlconf工厂定义路由规则,确保每个URL都有对应的视图处理。
from django.urls import pathfrom login import viewsurlpatterns = [ path('admin/', admin.site.urls), path('', include('login.urls')),] 定义各个视图函数,处理不同请求方法。
from django.shortcuts import render, redirectdef index(request): return render(request, 'login/index.html')def login(request): if request.method == 'POST': # 登录逻辑 pass return render(request, 'login/login.html')def register(request): if request.method == 'POST': # 注册逻辑 pass return render(request, 'login/register.html')def logout(request): if request.session.get('is_login'): request.session.flush() return redirect('/login/') return redirect('/login/') 通过Django的表单类简化前端开发流程,确保表单数据验证和处理更加高效。
from django import formsfrom captcha.fields import CaptchaFieldclass LoginForm(forms.Form): username = forms.CharField(label='用户名', required=True, min_length=4, max_length=128) password = forms.CharField(label='密码', required=True, min_length=4, max_length=10) captcha = CaptchaField(label='验证码')
支持邮箱注册,添加验证码验证,确保用户信息安全。
class RegisterForm(forms.Form): username = forms.CharField(label='用户名', required=True, min_length=4, max_length=128) password1 = forms.CharField(label='密码', max_length=256, required=True) password2 = forms.CharField(label='确认密码', max_length=256, required=True) email = forms.EmailField(label='邮箱地址') captcha = CaptchaField(label='验证码')
通过邮件发送确认码,实现邮件注册功能。
import hashlibfrom datetime import datetimefrom django.core.mail import send_mailfrom login.models import ConfirmStringdef hash_code(s, salt='mysite'): h = hashlib.sha256() h.update(s.encode()) return h.hexdigest()def make_confirm_string(user): now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") code = hash_code(user.name, now) ConfirmString.objects.create(code=code, user=user) return codedef send_email(email, code): subject = '注册确认邮件' text_content = f'感谢注册,以下是您的验证链接:{request.scheme}://{request.get_full_url()}:8080/confirm/?code={code}' html_content = f'感谢注册点击验证,这里是登录注册系统网站!
请点击站点链接完成注册确认!
此链接有效期为{settings.CONFIRM_DAYS}天!
' send_mail(subject, text_content, settings.EMAIL_HOST_USER, [email, ], html_message=html_content) 通过新增确认码模型,实现邮件确认功能。
from login.models import ConfirmStringclass ConfirmStringAdmin(admin.ModelAdmin): list_display = ['user', 'code', 'create_time'] ordering = ['-create_time']
确保未经过邮件确认的用户无法登录。
def login(request): if not request.session.get('is_login'): if not request.session.get('has_confirmed'): message = '该用户还未经过邮件确认!' return render(request, 'login/login.html', locals()) # 其他登录逻辑 通过以上步骤,我们可以完整地搭建一个功能完善的注册登录系统,涵盖用户管理、安全验证、前端优化等多个方面。
转载地址:http://kkrlz.baihongyu.com/